#ifndef _WX_MSGOUT_H_
#define _WX_MSGOUT_H_

#include "wx/defs.h"
#include "wx/wxchar.h"

class wxMessageOutput {
  public:
    virtual ~wxMessageOutput() { }
    virtual void Printf( const wxChar* format, ... )  ATTRIBUTE_PRINTF_2 = 0;
    static wxMessageOutput* Get();
    static wxMessageOutput* Set( wxMessageOutput* msgout );
  private:
    static wxMessageOutput* ms_msgOut;
};

class wxMessageOutputBest : public wxMessageOutput {
  public:
    wxMessageOutputBest() { }
    virtual void Printf( const wxChar* format, ... ) ATTRIBUTE_PRINTF_2;
};

class wxMessageOutputStderr : public wxMessageOutput {
  public:
    wxMessageOutputStderr() { }

    virtual void Printf( const wxChar* format, ... ) ATTRIBUTE_PRINTF_2;
};

#if wxUSE_GUI

class wxMessageOutputMessageBox : public wxMessageOutput {
  public:
    wxMessageOutputMessageBox() { }

    virtual void Printf( const wxChar* format, ... ) ATTRIBUTE_PRINTF_2;
};

#endif

class wxMessageOutputDebug : public wxMessageOutput {
  public:
    wxMessageOutputDebug() { }
    virtual void Printf( const wxChar* format, ... ) ATTRIBUTE_PRINTF_2;
};

class wxMessageOutputLog : public wxMessageOutput {
  public:
    wxMessageOutputLog() { }
    virtual void Printf( const wxChar* format, ... ) ATTRIBUTE_PRINTF_2;
};

#endif
